home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / AssignOpExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  4.0 KB  |  101 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.java.Constants;
  7. import sun.tools.java.Environment;
  8.  
  9. public class AssignOpExpression extends BinaryAssignExpression {
  10.    final int NOINC = Integer.MAX_VALUE;
  11.  
  12.    public AssignOpExpression(int var1, int var2, Expression var3, Expression var4) {
  13.       super(var1, var2, var3, var4);
  14.    }
  15.  
  16.    int getIncrement() {
  17.       if (super.left.op == 60 && super.type.isType(4) && super.right.op == 65 && (super.op == 5 || super.op == 6) && ((IdentifierExpression)super.left).field.isLocal()) {
  18.          int var1 = ((IntExpression)super.right).value;
  19.          if (super.op == 6) {
  20.             var1 = -var1;
  21.          }
  22.  
  23.          if (var1 == (short)var1) {
  24.             return var1;
  25.          }
  26.       }
  27.  
  28.       return Integer.MAX_VALUE;
  29.    }
  30.  
  31.    public long checkValue(Environment var1, Context var2, long var3, Hashtable var5) {
  32.       var3 = super.left.checkAssignOp(var1, var2, var3, var5, this);
  33.       var3 = super.right.checkValue(var1, var2, var3, var5);
  34.       ((UnaryExpression)this).selectType(var1, var2, super.left.type.getTypeMask() | super.right.type.getTypeMask());
  35.       if (!super.type.isType(13)) {
  36.          ((Node)this).convert(var1, var2, super.type, super.left);
  37.       }
  38.  
  39.       return var3;
  40.    }
  41.  
  42.    public Expression inlineValue(Environment var1, Context var2) {
  43.       super.left = super.left.inlineValue(var1, var2);
  44.       super.right = super.right.inlineValue(var1, var2);
  45.       return this;
  46.    }
  47.  
  48.    public Expression copyInline(Context var1) {
  49.       AssignOpExpression var2 = (AssignOpExpression)((Node)this).clone();
  50.       var2.left = super.left.copyInline(var1);
  51.       var2.right = super.right.copyInline(var1);
  52.       return var2;
  53.    }
  54.  
  55.    public int costInline(int var1) {
  56.       return this.getIncrement() != Integer.MAX_VALUE ? 2 : 3 + super.costInline(var1);
  57.    }
  58.  
  59.    void code(Environment var1, Context var2, Assembler var3, boolean var4) {
  60.       int var5 = this.getIncrement();
  61.       if (var5 != Integer.MAX_VALUE) {
  62.          int var8 = ((LocalField)((IdentifierExpression)super.left).field).number;
  63.          int[] var7 = new int[]{var8, var5};
  64.          var3.add(super.where, 132, var7);
  65.          if (var4) {
  66.             super.left.codeValue(var1, var2, var3);
  67.          }
  68.  
  69.       } else {
  70.          int var6 = super.left.codeLValue(var1, var2, var3);
  71.          ((Expression)this).codeDup(var1, var2, var3, var6, 0);
  72.          super.left.codeLoad(var1, var2, var3);
  73.          ((Expression)this).codeConversion(var1, var2, var3, super.left.type, super.type);
  74.          super.right.codeValue(var1, var2, var3);
  75.          ((BinaryExpression)this).codeOperation(var1, var2, var3);
  76.          ((Expression)this).codeConversion(var1, var2, var3, super.type, super.left.type);
  77.          if (var4) {
  78.             ((Expression)this).codeDup(var1, var2, var3, super.type.stackSize(), var6);
  79.          }
  80.  
  81.          super.left.codeStore(var1, var2, var3);
  82.       }
  83.    }
  84.  
  85.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  86.       this.code(var1, var2, var3, true);
  87.    }
  88.  
  89.    public void code(Environment var1, Context var2, Assembler var3) {
  90.       this.code(var1, var2, var3, false);
  91.    }
  92.  
  93.    public void print(PrintStream var1) {
  94.       var1.print("(" + Constants.opNames[super.op] + " ");
  95.       super.left.print(var1);
  96.       var1.print(" ");
  97.       super.right.print(var1);
  98.       var1.print(")");
  99.    }
  100. }
  101.